iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1
AI & Data

用Python程式進行股票技術分析系列 第 5

Day5 K線、K線圖與K線型態

  • 分享至 

  • xImage
  •  

簡介K線與K線圖

K線(或K棒)又稱為陰陽燭、蠟燭線;相傳源自17世紀時,日本山形縣酒田的米商本間宗久發明。K線圖形由「實體」和「影線」兩部份組成,實體較影線粗,影線位於實體的上下兩端。由每天的四個價格所組成,實體部份記錄當天的開盤價和收盤價,影線部份則記錄當天的最高價和最低價。以下為圖形示意:
Imgur
當收盤價高於開盤價時稱為「陽線」,若只使用黑白兩色表示時是以【白色】代表「陽」;但以彩色方式呈現時亞洲這邊是以【紅色】表示(因此又稱為紅K),但在歐美那邊會是以【綠色】表示。當收盤價低於開盤價時稱為「陰線」,若只使用黑白兩色表示時是以【黑色】代表「陰」;但以彩色方式呈現時亞洲這邊是以【黑色】或【綠色】表示(因此又稱為黑K),但在歐美那邊會是以【紅色】表示。上述這些表示方式會影響到程式設定,請先留意。
然後將複數的K線集合起來就成為K線圖。

程式實作:使用mplfinace繪製K線圖

將Day4從看盤軟體中取得的K線資料繪製K線圖,程式碼如下:

# 設定K線格式
mc = mpf.make_marketcolors(up='xkcd:light red', down='xkcd:almost black', inherit=True)
s  = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)

# 設定移動平均線
added_plots={
    "SMA5": mpf.make_addplot(df_sma['SMA5'],width=0.6,color='xkcd:maroon'),
    "SMA10": mpf.make_addplot(df_sma['SMA10'],width=0.6,color='xkcd:cyan'),
    "SMA20": mpf.make_addplot(df_sma['SMA20'],width=0.6,color='xkcd:violet'),
    "SMA60": mpf.make_addplot(df_sma['SMA60'],width=0.6,color='xkcd:salmon'),
    "SMA120": mpf.make_addplot(df_sma['SMA120'],width=0.6,color='xkcd:blue grey'),
    "SMA240": mpf.make_addplot(df_sma['SMA240'],width=0.6,color='xkcd:sky blue')
            }

# 繪製K線圖
kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=list(added_plots.values()), volume=True, datetime_format='%Y-%m-%d')
mpf.plot(df_k_line,**kwargs)

首先是K線格式的設定,將呈現方式設定為亞洲格式(開低收高為紅、開高收低為黑/綠);接下來設定各條移動平均線(將在Day7時說明)後,就可以繪製K線圖。
先把看盤軟體的K線圖呈現於下:
Imgur
再把mplfinace繪製K線圖呈現於下:
Imgur
可以發現成交量的顏色表示方式看盤軟體與mplfinace並不一致。看盤軟體在成交量的顏色表示是以當日收盤價上漲(也就是當日收盤價高於前一日收盤價)為紅色,當日收盤價下跌(也就是當日收盤價低於前一日收盤價)為綠色。而mplfinace的成交量顏色則是跟隨著K線顏色而定。相異之處還請注意。

K線型態

K線本身有一些型態可供識別,為1~3根K線所組成的簡易型態;但與Day12所談到「型態理論」的型態有所不同。常見的型態有:

紡錘線:
股價來回震盪,開盤價與收盤價的差距不大,實體上下均留有影線,狀似紡織用的紡錘而得名,實體的長度應在當日區間的1/3以下,甚至1/4以下。
Imgur
十字線:
開盤價與收盤價大致相同,但比較嚴格的定義是完全相等。
Imgur
槌子線:
在開盤之後呈現重挫,但於收盤之時,價格收在開盤價附近。
Imgur

程式實作:使用talib套件識別K線型態

用talib套件就可以識別K線型態,但要將Day4的K線資料送入talib套件函式前,需要將行(Column)的名稱改為全部小寫:

from talib.abstract import *

# 當使用talib Abstract API時,DataFrame欄位名稱需為小寫
# 請參考書籍:Python:量化交易 Ta-Lib 技術指標 139個活用技巧
df_k_line_talib = df_k_line.copy()
df_k_line_talib.columns=[ i.lower() for i in df_k_line_talib.columns]

然後就可以用talib套件的CDLSPINNINGTOP函式識別紡錘線型態:

# 識別紡錘線型態
CDLSPINNINGTOP(df_k_line_talib)

今天程式實作完整的程式碼為「第五天:K線、K線圖與K線型態.ipynb」,因此若對於文章內片段的程式碼有不明瞭之處就請參閱該Jupyter Notebook內容。


上一篇
Day4 從看盤軟體中取得資料
下一篇
Day6 價量關係
系列文
用Python程式進行股票技術分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言